var chess=document.getElementById('chess');
var context=chess.getContext('2d');
var me=true;
var chessBoard=[];
var count=0;
var over=false;
//赢法数组
var wins=[];
//赢法的统计数组
var myWin=[];
var computerWin=[];

for (var i = 0; i <15 ; i++) {
    chessBoard[i]=[];
    for (var j = 0; j < 15; j++) {
        chessBoard[i][j]=0;
    }
}

for (var i = 0; i <15 ; i++) {
    wins[i]=[];
    for (var j = 0; j <15 ; j++) {
        wins[i][j]=[];
    }
}
//统计所有赢法
// 横向
for (var i = 0; i < 11; i++) {
    for (var j = 0; j < 15; j++) {
        for (var k = 0; k < 5; k++) {
            wins[i+k][j][count]=true;
        }
        count++
    }
}
// 纵向
for (var i = 0; i < 15; i++) {
    for (var j = 0; j < 11; j++) {
        for (var k = 0; k < 5; k++) {
            wins[i][j+k][count]=true;
        }
        count++
    }
}
//斜线
for (var i = 14; i > 3; i--) {
    for (var j = 0; j < 11; j++) {
        for (var k = 0; k < 5; k++) {
            wins[i-k][j+k][count]=true;
        }
        count++
    }
}
// 反斜线
for (var i = 0; i < 11; i++) {
    for (var j = 0; j <11; j++) {
        for (var k = 0; k < 5; k++) {
            wins[i+k][j+k][count]=true;
        }
        count++
    }
}
//初始化赢法数组
for (var i = 0; i <count ; i++) {
    myWin[i]=0;
    computerWin[i]=0;
}

context.strokeStyle='#BFBFBF';
var logo=new Image();
logo.src="xiaozhu.png";
logo.onload=()=>{
  context.drawImage(logo,112.5,112.5,225,225);
  drawChessBoard();
};

 var drawChessBoard=()=>{
     for (var i = 0; i < 15; i++) {
         context.moveTo(15+i*30,15);
         context.lineTo(15+i*30,435);
         context.moveTo(15,15+i*30);
         context.lineTo(435,15+i*30);
         context.stroke();
     }
 };

 var onStep=(i,j,me)=>{
     context.beginPath();
     context.arc(15+i*30,15+j*30,13,0,2*Math.PI);
     context.closePath();
     let gradient = context.createRadialGradient(15+i*30+2,15+j*30-2, 13, 15+i*30+2,15+j*30-2, 0);
     if(me){
         gradient.addColorStop(0,'#0A0A0A');
         gradient.addColorStop(1,'#636766');
     }else {
         gradient.addColorStop(0,'#D1D1D1');
         gradient.addColorStop(1,'#F9F9F9');
     }
     context.fillStyle=gradient;
     context.fill();
 };

 chess.onclick=(ev)=>{
     if(over){
         return;
     }
     if(!me){
         return;
     }
     var x=ev.offsetX;
     var y=ev.offsetY;
     var i=Math.floor(x/30);
     var j=Math.floor(y/30);
     if(chessBoard[i][j]==0){
         onStep(i,j,me);
         chessBoard[i][j]=1;
         for (var k = 0; k <count ; k++) {
             if(wins[i][j][k]){
                 myWin[k]++;
                 computerWin[k]=6;
                 if(myWin[k]==5){
                     window.alert("你赢了！");
                     over=true;
                 }
             }
         }
         if(!over){
             me=!me;
             computerAI();
         }
     }
 };

 var computerAI=()=>{
     var myScore=[];
     var computerScore=[];
     var max=0;
     var u=0;
     var v=0;
     for (var i = 0; i <15 ; i++) {
         myScore[i]=[];
         computerScore[i]=[];
         for (var j = 0; j <15 ; j++) {
             myScore[i][j]=0;
             computerScore[i][j]=0;
         }
     }
     for (var i = 0; i <15 ; i++) {
         for (var j = 0; j <15 ; j++) {
             if(chessBoard[i][j]==0){
                 for (var k = 0; k <count ; k++) {
                     if(wins[i][j][k]){
                         if(myWin[k]==1){
                             myScore[i][j]+=200;
                         }else if(myWin[k]==2){
                             myScore[i][j]+=400;
                         }else if(myWin[k]==3){
                             myScore[i][j]+=2000;
                         }else if(myWin[k]==4){
                             myScore[i][j]+=10000;
                         }
                         if(computerWin[k]==1){
                             computerScore[i][j]+=220;
                         }else if(computerWin[k]==2){
                             computerScore[i][j]+=420;
                         }else if(computerWin[k]==3){
                             computerScore[i][j]+=2100;
                         }else if(computerWin[k]==4){
                             computerScore[i][j]+=20000;
                         }
                     }
                 }
                 if(myScore[i][j]>max){
                     max=myScore[i][j];
                     u=i;
                     v=j;
                 }else if(myScore[i][j]==max){
                     if(computerScore[i][j]>computerScore[u][v]){
                         u=i;
                         v=j;
                     }
                 }
                 if(computerScore[i][j]>max){
                     max=computerScore[i][j];
                     u=i;
                     v=j;
                 }else if(computerScore[i][j]==max){
                     if(myScore[i][j]>myScore[u][v]){
                         u=i;
                         v=j;
                     }
                 }
             }
         }
     }
     onStep(u,v,false);
     chessBoard[u][v]=2;
     for (var k = 0; k <count ; k++) {
         if(wins[u][v][k]){
             computerWin[k]++;
             myWin[k]=6;
             if(computerWin[k]==5){
                 window.alert("计算机赢了！");
                 over=true;
             }
         }
     }
     if(!over){
         me=!me;
     }
 };